#include "fatfs.h"
#include <stdio.h>
#include <string.h>

void FATFS_GetFreeSpace(const TCHAR *path)
{
  FATFS *fs;
  DWORD fre_clust,fre_sect,tot_sect;

  f_getfree(path,&fre_clust,&fs);

  tot_sect=(fs->n_fatent-2)*fs->csize;
  fre_sect=fre_clust*fs->csize;

  printf("%10lu KiB total drive space.\n%10lu KiB available.\n",tot_sect*4,fre_sect*4);
}

/**
  * @brief  scan_files 递归扫描FatFs内的文件
  * @param  path:初始扫描路径
  * @retval result:文件系统的返回值
  */
FRESULT FATFS_Scan_Files(TCHAR* path) 
{ 
  FRESULT res; 		//部分在递归过程被修改的变量，不用全局变量	
  FILINFO fno; 
  DIR dir; 
  int i;            
  char *fn;        // 文件名	 
  //打开目录
  res=f_opendir(&dir,path); 
  if(res == FR_OK){ 
    i=strlen(path); 
    while(1){ 
      //读取目录下的内容，再读会自动读下一个文件
      res=f_readdir(&dir, &fno); 								
      //为空时表示所有项目读取完毕，跳出
      if(res!=FR_OK||fno.fname[0]==0){
        break; 
      } 	
      fn=fno.fname;  
      //点表示当前目录，跳过			
      if(*fn=='.'){
        continue;
      }  	
      //目录，递归读取      
      if(fno.fattrib&AM_DIR){ 			
        //合成完整目录名        
        sprintf(&path[i],"/%s",fn); 		
        //递归遍历         
        res=FATFS_Scan_Files(path);	
        path[i]=0;         
        //打开失败，跳出循环        
        if(res!=FR_OK){
          break;
        }
      }else{ 
				printf("%s/%s\n",path,fn);								//输出文件名	
        /* 可以在这里提取特定格式的文件路径 */        
      }
    }
  } 
  return res; 
}